home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / tutorials / custEducation / opengl2 / lib / font.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-11-11  |  5.2 KB  |  153 lines

  1. /*
  2.  * (c) Copyright 1993, Silicon Graphics, Inc.
  3.  * ALL RIGHTS RESERVED 
  4.  * Permission to use, copy, modify, and distribute this software for 
  5.  * any purpose and without fee is hereby granted, provided that the above
  6.  * copyright notice appear in all copies and that both the copyright notice
  7.  * and this permission notice appear in supporting documentation, and that 
  8.  * the name of Silicon Graphics, Inc. not be used in advertising
  9.  * or publicity pertaining to distribution of the software without specific,
  10.  * written prior permission. 
  11.  *
  12.  * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
  13.  * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
  14.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
  15.  * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
  16.  * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
  17.  * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
  18.  * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
  19.  * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
  20.  * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
  21.  * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
  22.  * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
  23.  * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
  24.  * 
  25.  * US Government Users Restricted Rights 
  26.  * Use, duplication, or disclosure by the Government is subject to
  27.  * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
  28.  * (c)(1)(ii) of the Rights in Technical Data and Computer Software
  29.  * clause at DFARS 252.227-7013 and/or in similar or successor
  30.  * clauses in the FAR or the DOD or NASA FAR Supplement.
  31.  * Unpublished-- rights reserved under the copyright laws of the
  32.  * United States.  Contractor/manufacturer is Silicon Graphics,
  33.  * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
  34.  *
  35.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  36.  */
  37.  
  38. #include <GL/gl.h>
  39. #include <GL/glu.h>
  40. #include <GL/glut.h>
  41.  
  42. #include "fonts.h"
  43.  
  44. GLenum tkCreateStrokeFont(GLuint fontBase)
  45. {
  46.     GLint mode, i, j;
  47.  
  48.     for (i = 0; strokeFont[i][0] != END_OF_LIST; i++) {
  49.     glNewList(fontBase+(unsigned int)strokeFont[i][0], GL_COMPILE);
  50.     for (j = 1; mode = strokeFont[i][j]; j += 3) {
  51.         if (mode == FONT_BEGIN) {
  52.         glBegin(GL_LINE_LOOP);
  53.         glVertex2f((float)strokeFont[i][j+1]*STROKE_SCALE,
  54.                (float)strokeFont[i][j+2]*STROKE_SCALE);
  55.         } else if (mode == FONT_NEXT) {
  56.         glVertex2f((float)strokeFont[i][j+1]*STROKE_SCALE,
  57.                (float)strokeFont[i][j+2]*STROKE_SCALE);
  58.         } else if (mode == FONT_END) {
  59.         glVertex2f((float)strokeFont[i][j+1]*STROKE_SCALE,
  60.                (float)strokeFont[i][j+2]*STROKE_SCALE);
  61.         glEnd();
  62.         } else if (mode == FONT_ADVANCE) {
  63.         glTranslatef((float)strokeFont[i][j+1]*STROKE_SCALE,
  64.                  (float)strokeFont[i][j+2]*STROKE_SCALE, 0.0);
  65.         break;
  66.         }
  67.     }
  68.     glEndList();
  69.     }
  70.     return GL_TRUE;
  71. }
  72.  
  73. GLenum tkCreateOutlineFont(GLuint fontBase)
  74. {
  75.     GLint mode, i, j;
  76.  
  77.     for (i = 0; outlineFont[i][0] != END_OF_LIST; i++) {
  78.     glNewList(fontBase+(unsigned int)outlineFont[i][0], GL_COMPILE);
  79.     for (j = 1; mode = outlineFont[i][j]; j += 3) {
  80.         if (mode == FONT_BEGIN) {
  81.         glBegin(GL_LINE_STRIP);
  82.         glVertex2f((float)outlineFont[i][j+1]*OUTLINE_SCALE,
  83.                (float)outlineFont[i][j+2]*OUTLINE_SCALE);
  84.         } else if (mode == FONT_NEXT) {
  85.         glVertex2f((float)outlineFont[i][j+1]*OUTLINE_SCALE,
  86.                (float)outlineFont[i][j+2]*OUTLINE_SCALE);
  87.         } else if (mode == FONT_END) {
  88.         glVertex2f((float)outlineFont[i][j+1]*OUTLINE_SCALE,
  89.                (float)outlineFont[i][j+2]*OUTLINE_SCALE);
  90.         glEnd();
  91.         } else if (mode == FONT_ADVANCE) {
  92.         glTranslatef((float)outlineFont[i][j+1]*OUTLINE_SCALE,
  93.                  (float)outlineFont[i][j+2]*OUTLINE_SCALE, 0.0);
  94.         break;
  95.         }
  96.     }
  97.     glEndList();
  98.     }
  99.     return GL_TRUE;
  100. }
  101.  
  102. GLenum tkCreateFilledFont(GLuint fontBase)
  103. {
  104.     GLint mode, i, j;
  105.  
  106.     for (i = 0; filledFont[i][0] != END_OF_LIST; i++) {
  107.     glNewList(fontBase+(unsigned int)filledFont[i][0], GL_COMPILE);
  108.     for (j = 1; mode = filledFont[i][j]; j += 3) {
  109.         if (mode == FONT_BEGIN) {
  110.         glBegin(GL_TRIANGLE_STRIP);
  111.         glVertex2f((float)filledFont[i][j+1]*FILLED_SCALE,
  112.                (float)filledFont[i][j+2]*FILLED_SCALE);
  113.         } else if (mode == FONT_NEXT) {
  114.         glVertex2f((float)filledFont[i][j+1]*FILLED_SCALE,
  115.                (float)filledFont[i][j+2]*FILLED_SCALE);
  116.         } else if (mode == FONT_END) {
  117.         glVertex2f((float)filledFont[i][j+1]*FILLED_SCALE,
  118.                (float)filledFont[i][j+2]*FILLED_SCALE);
  119.         glEnd();
  120.         } else if (mode == FONT_ADVANCE) {
  121.         glTranslatef((float)filledFont[i][j+1]*FILLED_SCALE,
  122.                  (float)filledFont[i][j+2]*FILLED_SCALE, 0.0);
  123.         break;
  124.         }
  125.     }
  126.     glEndList();
  127.     }
  128.     return GL_TRUE;
  129. }
  130.  
  131. void DrawStr(GLuint base, char *str)
  132. {
  133.  
  134.     glPushAttrib(GL_LIST_BIT);
  135.     glListBase(base);
  136.     glCallLists(strlen(str), GL_UNSIGNED_BYTE, (unsigned char *)str);
  137.     glPopAttrib();
  138. }
  139.  
  140. /**************************************************************************
  141.  *   RenderBitmapFontString() - Print an ASCII text string in given font
  142.  **************************************************************************/
  143.  
  144. GLvoid
  145. RenderBitmapFontString( void *font, char *string )
  146. {
  147.     int i;
  148.     int len = (int) strlen(string);
  149.     for (i = 0; i < len; i++) {
  150.         glutBitmapCharacter(font, string[i]);
  151.     }
  152. }
  153.